package com.idemon.task;

import com.fasterxml.jackson.annotation.JsonCreator;

/**
 * Task枚举
 * 用于指定所有com.idemon.task.Task实现类的唯一编号和注入容器的名称
 * 每个com.idemon.task.Task实现类都必须配置唯一一个对应的枚举
 *
 * @author idemon
 * @since 2020-09-27 11:24
 */
public enum TaskName {
    /**
     * 所有Task枚举
     */
    AIRBUS_TASK(1, "airbusTask"),
    ;
    /**
     * com.idemon.task.Task实现类的唯一编号
     * 与数据库表task_config中的NAME字段对应
     */
    private final int value;
    /**
     * com.idemon.task.Task实现类注入容器的名称
     * 例如：com.idemon.task.AirbusTask对应为 airbusTask
     */
    private final String name;

    TaskName(int value, String name) {
        this.value = value;
        this.name = name;
    }

    public int getValue() {
        return this.value;
    }
    public String getName() {
        return this.name;
    }

    @JsonCreator
    public static TaskName fromValue(int value) {
        for (TaskName taskName : TaskName.values()) {
            if (taskName.value == value) {
                return taskName;
            }
        }
        throw new IllegalArgumentException();
    }

    public static TaskName fromName(String name) {
        for (TaskName taskName : TaskName.values()) {
            if (taskName.name.equals(name)) {
                return taskName;
            }
        }
        throw new IllegalArgumentException(String.format("There is not the name( %s )in The enum TaskName",name));
    }
}
